Laravel 基礎結構 MVC 架構 (Models-Views-Controllers)
模型 Models
app/Models 目錄中。視圖 Views
resources/views 目錄中。控制器 Controllers
app/Http/Controllers 目錄中。app/
  ├── Console/           # Artisan 命令
  ├── Exceptions/        # 自定義例外處理
  ├── Http/
  │   ├── Controllers/   # 控制器
  │   ├── Middleware/    # 中介層
  │   └── Requests/      # 請求驗證
  ├── Models/            # Eloquent 模型
bootstrap/
  ├── app.php            # 框架啟動腳本
config/                  # 配置文件
database/
  ├── factories/         # 模型工廠
  ├── migrations/        # 數據庫遷移
  └── seeders/           # 數據填充
public/                  # 公共資源(如 CSS、JavaScript)
resources/
  ├── lang/              # 語言文件
  ├── views/             # Blade 模板
  └── sass/              # SCSS 文件
routes/                  # 路由定義
storage/                 # 日誌和上傳文件
tests/                   # 測試文件
vendor/                  # Composer 依賴包
路由和控制器
使用 RESTful 路由來組織應用的 URL 結構。
當然也可以用資源控制器的方法,指令 php artisan make:controller {TodoController} --resource Laravel 資源路由就會使用一行程式碼將典型的建立、讀取、更新和刪除 CRUD 路由分配給控制器。
數據庫操作
通過使用 Eloquent ORM,進行資料庫的 CRUD 操作,當然個人覺得最複雜的地方也是這段,因為還有 model 的關聯 relationships!
視圖與模板
參考文章:30天 JavaScript 提升計畫:從零到精通結合2024年的創新功能 - 第 26 天:安全最佳實踐
回顧:第 13 天:前端 Vue3 搭配後端 Laravel 9.x
使用 Blade 模板引擎渲染視圖,理解視圖的組織結構和數據傳遞,這裡是我一開始學後端的時候認識路由的地方,一路上覺得這裡的重點是用 @csrf 來保護表單。
當然,依照現在的專案主要是前後端分離,所以可以用前端框架或是原生寫法取代傳統的 Blade 視圖來實現前後端分離。
🐘 補充說明:
@csrf用於生成一個 CSRF 保護令牌,防止跨站請求偽造。
表單和驗證
創建表單並進行表單驗證,或是使用 Laravel 的 獨立驗證 Validator::make() 驗證功能來處理用戶輸入。
當使用者成功創建、更新或刪除待辦事項後,也可以使用 redirect()->route('todos.index')->with('success', '...'); 來向用戶顯示成功消息。
中介層和安全性
中介層用於過濾請求進入應用程序。例如,可以用於身份驗證或日誌記錄。
中介層放在 app/Http/Middleware 。
API 開發
建立 RESTful API。
使用 JSON 輸出數據,並理解 API 的認證機制。
測試和除錯
學會編寫單元測試和功能測試。
使用 Laravel 的日誌系統進行除錯。
之前的任務管理系統也是標準的 CRUD 範例,今天寫一個每次學新語言或框架都會練習的 To_do List!
創建數據表和模型
運用指令 php artisan make:model Todo -m
public function up()
{
    Schema::create('todos', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->boolean('completed')->default(false);
        $table->timestamps();
    });
}
編輯控制器
namespace App\Http\Controllers;
use App\Models\Todo;
use Illuminate\Http\Request;
class TodoController extends Controller
{
    public function index()
    {
        return Todo::all();
    }
    public function store(Request $request)
    {
        $todo = Todo::create($request->all());
        return response()->json($todo, 201);
    }
    public function update(Request $request, Todo $todo)
    {
        $todo->update($request->all());
        return response()->json($todo, 200);
    }
    public function destroy(Todo $todo)
    {
        $todo->delete();
        return response()->json(null, 204);
    }
}
編輯 routes/api.php 設置 API 路由
use App\Http\Controllers\TodoController;
Route::resource('todos', TodoController::class);
官方文檔:laravel
中文文件:Laravel 5.8 入門講義、laravel
學習資源:PHP 教程、SQL 教程